#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=5e5+10;
int a[N];
int b[N];
int st[N];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",a+i);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",b+i);
	}
	int len1=0;
	int mlen=0;
	int mlen2=0;
	int len2=0;
	for(int i=1;i<=n;i++)
	{
		len1=0;
		len2=0;
		mlen2=0;
		int j=i;
		while(st[j]==0)
		{
			st[j]=1;
			len1++;
			if(a[b[j]]==a[j]) 
			{
				len2++;
			}
			else
			{
				mlen2=max(mlen2,len2); 
				len2=0;
			}
			j=b[j];
		}
		mlen=max(mlen,len1-mlen2);
	}
	cout<<max(mlen,1);

	return 0;
}

